package cn.sylinx.common.ext.check;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import cn.sylinx.common.ext.exception.WrappedException;
import cn.sylinx.common.lang.Result;
import cn.sylinx.common.lang.ResultSupport;

/**
 * 默认链式检查器
 * @author johnhan at 2018年5月5日 下午3:13:22
 *
 */
public class DefaultChainChecker implements ChainChecker {

	//检查器列表
	private List<Checker> checkerList = new ArrayList<>();
	
	@SuppressWarnings("unchecked")
	@Override
	public Result check() {
		
		if(checkerList.isEmpty()) {
			throw new WrappedException("检查器列表为空");
		}
		
		Result result = new ResultSupport(true);
		Map<String,Result> okMap = new HashMap<>();
		result.getModels().put("data", okMap);
		
		for(Checker item : checkerList) {
			Result itemResult = item.check();
			if(!itemResult.isSuccess()) {
				return itemResult;
			}
			okMap.put(item.getName(), itemResult);
		}
		
		return result;
	}

	@Override
	public void addChecker(Checker checker) {
		checkerList.add(checker);
	}

}
